package com.dt.dubai.core.qrcode.artQR.test;


import com.dt.dubai.core.qrcode.artQR.base.ColorUtil;
import com.dt.dubai.core.qrcode.artQR.wrapper.QrCodeGenWrapper;
import com.dt.dubai.core.qrcode.artQR.wrapper.QrCodeOptions;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.junit.Test;

import java.awt.*;

/**
 * 二维码插件用户使用实例，教程说明文档参考：
 *  <a href="https://liuyueyi.github.io/quick-media/#/%E6%8F%92%E4%BB%B6/%E4%BA%8C%E7%BB%B4%E7%A0%81/%E4%BA%8C%E7%BB%B4%E7%A0%81%E6%8F%92%E4%BB%B6%E6%A6%82%E8%A7%88">二维码插件概览</a>
 * Created by @author yihui in 21:05 19/11/11.
 */
public class QrCodeGenUserGuide {

    /**
     * 默认的二维码生成
     */
    @Test
    public void defaultQr() {
        try {
            // 生成二维码，并输出为qr.png图片
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg).asFile("/tmp/dq.png");  //设置图片的保存路径

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void colorQr() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(300)
                    // 定位点(探测图形)外边颜色
                    .setDetectOutColor(Color.CYAN)
                    // 定位点内部颜色
                    .setDetectInColor(Color.RED)
                    // 二维码着色点
                    .setDrawPreColor(Color.BLUE)
                    // 二维码背景图颜色
                    .setDrawBgColor(0xffffffff)
                    .asFile("/tmp/cqr.png"); //设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void logoQr0() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            String logo = "https://static.oschina.net/uploads/user/283/566591_100.jpeg";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setLogo(logo)  //设置logo
                    .asFile("/tmp/lqr0.png");  //设置图片的保存路径
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void logoQr1() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            String logo = "https://static.oschina.net/uploads/user/283/566591_100.jpeg";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setLogo(logo)   //设置logo
                    .setLogoBgColor(0xff808080)  //设置logo背景颜色
                    .setLogoBorder(true)  //设置logo边框
                    .asFile("/tmp/lqr1.png");  //设置图片的保存路径
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void logoQr2() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            String logo = "https://static.oschina.net/uploads/user/283/566591_100.jpeg";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setLogo(logo)  //设置logo
                    .setLogoStyle(QrCodeOptions.LogoStyle.ROUND)  //设置logo样式  圆角
                    .setLogoBgColor(0xffc7c7c7) //设置logo背景颜色
                    .setLogoBorder(true)  //设置logo边框
                    .asFile("/tmp/lqr2.png");  //设置图片的保存路径
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void logoQr3() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            String logo = "https://static.oschina.net/uploads/user/283/566591_100.jpeg";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setLogo(logo)  //设置logo
                    .setLogoStyle(QrCodeOptions.LogoStyle.ROUND)//设置logo样式  圆角
                    .setLogoBgColor(0xfffefefe)//设置logo背景颜色
                    .setLogoBorderBgColor(0xffc7c7c7)//设置logo边框颜色
                    .setLogoBorder(true)//设置logo边框
                    .asFile("/tmp/lqr3.png");  //设置图片的保存路径
        }catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 背景图的二维码，默认全覆盖模式
     */
    @Test
    public void bgQr1() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            String bg = "http://ww1.sinaimg.cn/large/8154e929gy1g8vho8x6r0j20b40b43yl.jpg";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setBgImg(bg)  //设置背景图片
                    .setW(500)  //设置二维码的宽
                    .setBgOpacity(0.5f)  //设置背景的透明度
                    .asFile("/tmp/bqr1.png");  //设置图片的保存路径
        }catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     *  指定为填充模式，在背景图的坐标(startX, startY)处绘制二维码(左上角坐标为0,0)
     */
    @Test
    public void bgQr2() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            String bg = "http://pic.51yuansu.com/pic3/cover/01/07/09/59015a0e53d83_610.jpg";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setBgImg(bg) //设置背景图片
                    .setBgStyle(QrCodeOptions.BgImgStyle.FILL) //设置背景图填充样式
                    .setBgW(500)  //设置背景的宽
                    .setBgH(500)  //设置背景的高
                    .setBgStartX(130)  //设置二维码的绘制在背景图上的x坐标
                    .setBgStartY(120)  //设置二维码的绘制在背景图上的y坐标
                    .setW(260)   //设置二维码的宽
                    .setPadding(0)  //设置内边距
                    .setDrawBgColor(0xfff7f7f7) //设置二维码绘制背景的颜色
                    .asFile("/tmp/bqr2.png");  //设置图片的保存路径
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 背景渲染方式，用背景图来填充二维码
     */
    @Test
    public void bgQr3() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            String bg = "http://img1.juimg.com/180517/355855-1P51H3520817.jpg";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setBgImg(bg)  //设置背景图片
                    .setBgStyle(QrCodeOptions.BgImgStyle.PENETRATE)  //设置背景图穿透显示, 即二维码主题色为透明，由背景图的颜色进行填充
                    .setBgW(500)  //设置背景的宽
                    .setBgH(500)  //设置背景的高
                    .setW(500)   //设置二维码的宽
                    .asFile("/tmp/bqr3.png");  //设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 全覆盖背景，并设置二维码的前置渲染图，后置渲染图片
     */
    @Test
    public void bgQr4() {
        String msg = "https://blog.hhui.top";
        String bg = "overbg/bg.jpg";
        String cell = "overbg/a.png";
        String bgCell = "overbg/b.png";

        try {
            Boolean ans = QrCodeGenWrapper.of(msg)
                    .setBgImg(bg)  //设置背景图片
                    .setW(500)  //设置二维码的宽
                    .setErrorCorrection(ErrorCorrectionLevel.H)  //设置错误校正级别 H
                    .setBgStyle(QrCodeOptions.BgImgStyle.OVERRIDE)  //设置二维码透明度，然后全覆盖背景图
                    .setDrawStyle(QrCodeOptions.DrawStyle.IMAGE)  //设置二维码绘制样式  自定义图片
                    .setDrawImg(cell)   //设置二维码着色点图片
                    .setDrawBgImg(bgCell)  //设置二维码着色背景图片
                    .asFile("/tmp/bqr4.png");  //设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 探测图形，用指定图片替换
     */
    @Test
    public void detectedQr1() {
        String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
        try {
            QrCodeGenWrapper.of(msg)
                    .setW(500)  //设置二维码的宽
                    .setDetectImg("detect.png")  //设置探测图形的图片
                    .asFile("/tmp/tqr1.png");  //设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 三个探测图形，用三张不同的图片
     */
    @Test
    public void detectedQr2() {
        String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
        try {
            QrCodeGenWrapper.of(msg)
                    .setW(500) //设置二维码的宽
                    .setLTDetectImg("leaf/eye.png")   //设置左上角探测图形图片
                    .setLDDetectImg("jihe/PDP.png")   //设置左下角探测图形图片
                    .setRTDetectImg("love/01.png")    //设置右上角探测图形图片
                    .setDiaphaneityFill(true) //设置透明度填充
                    .asFile("/tmp/tqr2.png");  //设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void rectQr() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400)  //设置二维码的宽
                    .setDrawStyle(QrCodeOptions.DrawStyle.RECT)   //设置二维码绘制样式  矩形
                    .asFile("/tmp/dqr0.png");  //设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void circleQr() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400)   //设置二维码的宽
                    .setDrawStyle(QrCodeOptions.DrawStyle.CIRCLE)   //设置二维码绘制样式  圆点
                    .asFile("/tmp/dqr1.png");  //设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void triangleQr() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400)   //设置二维码的宽
                    .setDrawStyle(QrCodeOptions.DrawStyle.TRIANGLE)  //设置二维码绘制样式  三角形
                    .asFile("/tmp/dqr2.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void diamondQr() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400)  //设置二维码的宽
                    .setDrawStyle(QrCodeOptions.DrawStyle.DIAMOND)  //设置二维码绘制样式  五边形-钻石
                    .asFile("/tmp/dqr3.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void sexAngleQr() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400) //设置二维码的宽
                    .setDrawStyle(QrCodeOptions.DrawStyle.SEXANGLE)  //设置二维码绘制样式   六边形
                    .asFile("/tmp/dqr4.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void octagonQr() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400)  //设置二维码的宽
                    .setDrawStyle(QrCodeOptions.DrawStyle.OCTAGON)  //设置二维码绘制样式   八边形
                    .asFile("/tmp/dqr5.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void circleQr2() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400)//设置二维码的宽
                    //true时表示支持对相邻的着色点进行合并处理（即用一个大图来绘制相邻的两个着色点）
                    .setDrawEnableScale(true)
                    .setDrawStyle(QrCodeOptions.DrawStyle.CIRCLE)  //设置二维码绘制样式  圆点
                    .asFile("/tmp/dqr6.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void diamondQr2() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400)//设置二维码的宽
                    //true时表示支持对相邻的着色点进行合并处理（即用一个大图来绘制相邻的两个着色点）
                    .setDrawEnableScale(true)
                    .setDrawStyle(QrCodeOptions.DrawStyle.DIAMOND)  //设置二维码绘制样式  五边形-钻石
                    .asFile("/tmp/dqr7.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void sexAngleQr2() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400)//设置二维码的宽
                    //true时表示支持对相邻的着色点进行合并处理（即用一个大图来绘制相邻的两个着色点）
                    .setDrawEnableScale(true)
                    .setDrawStyle(QrCodeOptions.DrawStyle.SEXANGLE)  //设置二维码绘制样式  六边形
                    .asFile("/tmp/dqr8.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void octagonQr2() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400)//设置二维码的宽
                    //true时表示支持对相邻的着色点进行合并处理（即用一个大图来绘制相邻的两个着色点）
                    .setDrawEnableScale(true)
                    .setDrawStyle(QrCodeOptions.DrawStyle.OCTAGON)  //设置二维码绘制样式  八边形
                    .asFile("/tmp/dqr9.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void imgQr1() {
        String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";

        int size = 500;
        try {
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(size)  //设置二维码的宽
                    .setH(size)  //设置二维码的高
                    .setErrorCorrection(ErrorCorrectionLevel.H)  //设置错误校正级别 H
                    .setDrawBgColor(ColorUtil.OPACITY) //设置二维码绘制的背景颜色 全透明颜色
                    .setDetectImg("jihe/PDP.png")  //设置探测图形的图片
                    .setDrawStyle(QrCodeOptions.DrawStyle.IMAGE)  //设置二维码绘制样式  自定义图片
                    .addImg(1, 1, "jihe/a.png") // 设置二维码绘制使用的图片
                    .addImg(3, 1, "jihe/b.png")
                    .addImg(1, 3, "jihe/c.png")
                    .addImg(3, 2, "jihe/e.png")
                    .addImg(2, 3, "jihe/f.png")
                    .addImg(2, 2, "jihe/g.png")
                    .addImg(3, 4, "jihe/h.png")
                    .setPicType("png") //设置图片的格式
                    .asFile("/tmp/imgQr1.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void imgQr2() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            int size = 500;
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(size)  //设置二维码的宽
                    .setH(size)  //设置二维码的高
                    .setErrorCorrection(ErrorCorrectionLevel.M)  //设置错误校正级别 M
                    .setDrawBgColor(ColorUtil.OPACITY)  //设置二维码绘制的背景颜色 全透明颜色
                    .setDetectImg("love/01.png") //设置探测图形的图片
                    .setDrawStyle(QrCodeOptions.DrawStyle.IMAGE) //设置二维码绘制样式  自定义图片
                    .addImg(1, 1, "love/003_01.png") // 设置二维码绘制使用的图片
                    .addImg(4, 1, "love/004.png")
                    .addImg(1, 4, "love/004_02.png")
                    .asFile("/tmp/imgQr2.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void imgQr3() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            int size = 500;
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(size)  //设置二维码的宽
                    .setH(size)  //设置二维码的高
                    .setErrorCorrection(ErrorCorrectionLevel.M) //设置错误校正级别 M
                    .setDrawBgColor(ColorUtil.OPACITY) //设置二维码绘制的背景颜色 全透明颜色
                    .setDrawBgImg("overbg/b.png")  //设置绘制二维码着色背景的图片
                    .setDrawStyle(QrCodeOptions.DrawStyle.IMAGE) //设置二维码绘制样式  自定义图片
                    .setDrawImg("overbg/a.png")   //设置绘制二维码着色点的图片
                    .asFile("/tmp/imgQr3.png");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 动态二维码，和背景图的使用姿势一样，唯一的区别就是背景图是动态的
     */
    @Test
    public void gifQr1() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            String bg = "http://ww1.sinaimg.cn/large/8154e929gy1g8pq78mcgrg20dw0boaja.gif";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(500)  //设置二维码的宽
                    .setBgImg(bg)  //设置背景图片
                    .setBgOpacity(0.6f)  //设置背景透明度
                    .setPicType("gif")  //设置图片的格式
                    .asFile("/tmp/gifQr1.gif");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void gifQr2() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            String bg = "http://ww1.sinaimg.cn/large/8154e929gy1g8qe2iv0evg20xc0irn68.gif";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setW(400)  //设置二维码的宽
                    .setBgImg(bg) //设置背景图片
                    .setBgStyle(QrCodeOptions.BgImgStyle.FILL)  //设置背景图填充样式
                    .setBgStartX(20)  //设置二维码的绘制在背景图上的x坐标
                    .setBgStartY(137)  //设置二维码的绘制在背景图上的y坐标
                    .setPicType("gif") //设置图片的格式
                    .asFile("/tmp/gifQr2.gif");//设置图片的保存路径
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void gifQr3() {
        try {
            String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
            String bg = "http://ww1.sinaimg.cn/large/8154e929gy1g8w7wj6qvsg20oy0io4dt.gif";
            boolean ans = QrCodeGenWrapper.of(msg)
                    .setBgImg(bg)  //设置背景图片
                    .setBgW(500)  //设置背景的宽
                    .setBgH(500)  //设置背景的高
                    .setBgStyle(QrCodeOptions.BgImgStyle.PENETRATE)  //背景图穿透显示, 即二维码主题色为透明，由背景图的颜色进行填充
                    .setW(500)  //设置二维码的宽
                    .asFile("/tmp/gifQr3.gif");//设置图片的保存路径
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}
